/*
  1. 解析URL
    判断URL是否合法且有效

  2. 判断是否命中强制缓存
    命中了直接读取缓存，不会发送请求

  3. DNS解析: 将域名解析成ip地址
    浏览器DNS缓存
    电脑DNS缓存
    路由器DNS缓存
    网络运营商DNS缓存
    根域名服务器递归查询
      a.b.c.com -> .com -> c.com -> b.c.com -> a.b.c.com

  4. TCP三次握手：https://www.yuque.com/xpromise/interview/fomgci9679lqskx5#9ad8bce4
    浏览器和服务器发送了三个数据包，也叫三次握手
    三次握手目的：确保双方收发（接受和发送）能力是正常的
      第一次握手：浏览器发起，服务器接受，服务器能确保浏览器发送能力是正常的
      第二次握手：服务器发起，浏览器接受，浏览器能确保服务器收发能力都正常
      第三次握手：浏览器发起，服务器接受，服务器能确保浏览器接受能力是正常的
  
  5. 发送请求
    浏览器将内容以请求报文形式发送给服务器
    （http协议请求报文）
  
  6. 接受响应
    服务器将内容以响应报文形式发送给浏览器
    （http协议响应报文）

  7. 渲染
    浏览器遇到页面结构，调用html解析器解析成DOM树
    遇到CSS样式，调用CSS解析器解析成CSSOM树
    将DOM树和CSSOM树合成一个渲染树render树
    根据render树开始布局（layout：计算元素大小和位置）和渲染（paint：绘制颜色）

    遇到JS代码，调用JS引擎解析JS代码，
      如果JS代码操作了DOM，重新生成DOM树
      如果JS代码操作了CSS，重新生成CSSOM树
      不管生产哪个，重新合成render树，重新布局和渲染（重排重绘）

    注意：某些DOM操作会导致重排重绘，影响页面渲染性能
      读取DOM元素宽高等，会重排重绘
      隐藏DOM元素，opacity更好（只会导致重绘）
      让多次DOM操作变成一次：fragment

  8. TCP四次挥手
    四次挥手目的：确保双方收发（接受和发送）都完事了
    第一次挥手：浏览器发起，服务器接受，告诉服务器请求报文发送完毕
    第二次挥手：服务器发起，浏览器接受，告诉浏览器请求报文接受完毕
    第三次挥手：服务器发起，浏览器接受，告诉浏览器响应报文发送完毕
    第四次挥手：浏览器发起，服务器接受，告诉服务器响应报文接受完毕
*/
